package com.jastar.android.test;

import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
import com.jastar.android.game.cannon.CannonGameActivity;
import com.jastar.android.game.gobang.GameNavigateActivity;
import com.jastar.android.game.lego.LegoGameActivity;
import com.jastar.android.game.richman.BootSetPlayerActivity;
import com.jastar.android.test.base.BaseNavigateActivity;
import com.jastar.android.test.demo.CalculatorActivity;
import com.jastar.android.test.demo.MathTestActivity;
import com.jastar.android.test.demo.WordsNavigateActivity;

import java.util.HashMap;
import java.util.Map;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private static final String PASSWORD = "1212";
    private static final Map<String, Class<?>> JUMP_MAP = new HashMap<>();

    static {
        JUMP_MAP.put("1", BootSetPlayerActivity.class); //大富翁
        JUMP_MAP.put("2", GameNavigateActivity.class); //五子棋
        JUMP_MAP.put("11", LegoGameActivity.class); //摆积木
        JUMP_MAP.put("12", CannonGameActivity.class); //投炮弹
    }

    private String word = "";

    /**
     * Activity生命周期：
     * onCreate()   创建活动。把页面布局加载进内存，进入初始状态
     * onStart()    开始活动。把活动页面显示在屏幕，进入就绪状态
     * onResume()   恢复活动。活动页面进入活跃状态，能够与用户正常交互，一般可以在这开启动画等
     * onPause()    暂停活动。页面进入暂停状态，无法与用户正常交互，一般可以在这暂停动画等
     * onStop()     停止活动。页面将不在屏幕上显示
     * onDestroy()  销毁活动。回收活动占用的系统资源，把页面从内存清除，一般可以在这关闭网络等
     * onRestart()  重启活动。重新加载内存中的页面数据
     * onNewIntent()重用已有的活动实例。出现在单例模式启动Activity时
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        super.findViewById(R.id.button_base).setOnClickListener(this);
        super.findViewById(R.id.button_calculator).setOnClickListener(this);
        super.findViewById(R.id.button_math).setOnClickListener(this);
        super.findViewById(R.id.button_words).setOnClickListener(this);
        super.findViewById(R.id.button_game).setOnClickListener(this);
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        switch (keyCode) {
            case KeyEvent.KEYCODE_DPAD_LEFT:
                word += 1;
                break;
            case KeyEvent.KEYCODE_DPAD_RIGHT:
                word += 2;
                break;
        }
        return super.onKeyDown(keyCode, event);
    }

    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.button_base) {
            jumpActivity(BaseNavigateActivity.class);
        } else if (v.getId() == R.id.button_calculator) {
            jumpActivity(CalculatorActivity.class);
        } else if (v.getId() == R.id.button_math) {
            jumpActivity(MathTestActivity.class);
        } else if (v.getId() == R.id.button_words) {
            jumpActivity(WordsNavigateActivity.class);
        } else if (v.getId() == R.id.button_game) {
            if (word.startsWith(PASSWORD)) {
                String code = word.replaceFirst(PASSWORD, "");
                if (JUMP_MAP.containsKey(code)) jumpActivity(JUMP_MAP.get(code));
            }
            word = "";
        }
    }

    /**
     * 页面跳转：startActivity()
     * 页面返回：finish()
     * ************************************************
     * 启动标志：
     * Intent.FLAG_ACTIVITY_NEW_TASK    开辟一个新的任务栈
     * Intent.FLAG_ACTIVITY_SINGLE_TOP  当栈顶为目标页时，重用栈顶
     * Intent.FLAG_ACTIVITY_CLEAR_TOP   当栈内有目标页时，重用并清除其上其他
     * Intent.FLAG_ACTIVITY_NO_HISTORY  栈内不保存新启动的实例
     * Intent.FLAG_ACTIVITY_CLEAR_TASK  清空原有栈
     * 示例一：AB页面反复互跳后，不需要反复返回
     * intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
     * 示例二：登录页面登录后跳转，返回时不返回登录页
     * intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
     * ************************************************
     * 传递参数：
     * intent.putExtra()        单个传参
     * intent.putExtras()       批量传参
     * getIntent().getExtras()  接收参数
     * ************************************************
     * 跳转并获取数据：
     * launcher = registerForActivityResult()       源页面注册启动器，其中第二个参数接收Callback
     * launcher.launch(intent)                      源页面启动启动器
     * setResult(MainActivity.RESULT_OK, intent)    目标页返回结果
     * ************************************************
     * 除去页面传参，还可以用以下方式共享数据：
     * 使用资源文件。用于全局常量配置，super.getString(R.string.app_name)
     * 使用元数据。配置在AndroidManifest.xml，可用于三方Token、桌面快捷菜单(shortcut)等
     */
    private void jumpActivity(Class<?> cls) {
        Intent intent = new Intent(this, cls);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        super.startActivity(intent);
    }

}